查看原文
其他

闪电网络实操,从最简单的比特币第二层闪电网络付款开始

CSDN App 区块链大本营 2019-12-18

来源 | Hackernoon

编译 | 火火酱

责编 | Carol

出品 | 区块链大本营(blockchain_camp)



好久不见的实操演练,又来了!


在本文中,我们将用测试网作为示范,利用比特币第二层闪电网络进行付款。


我们将会使用命令行工具,因为我发现这是使用网络的最可靠的方法,同时也可以让你对网络的运行方式有更加深入的了解。


俗话说,磨刀不误砍柴工。为了能够完成今天的实操,你需要提前安装好以下环境。


你要能够访问满足以下两个条件的闪电网络节点:
  1. 正在运行bitcoind和lightningd,并且已与testnet区块链同步。
  2. 已安装blockstream的c-lightning cli工具lightning-cli,并且可以访问其$PATH。


生成地址和资金钱包

第一层BTC交易=1。等待时间=60分钟。


创建一个新地址。


到测试网Faucet中给自己发送一些比特币,使用支持IPV6的Chrome浏览器可以获得70%的额外津贴!


点击下面的交易ID链接,就可以进入包含交易详细信息的区块链浏览器。


交易 ID 链接:

https://testnet.blockchain.info/


你需要等待6次确认——大约需要1个小时,资金才会显示在你的钱包中。


$ lightning-cli listfunds{ "outputs": [{ "txid": "d30ad72742d5c05343f65a1f78a90191f7b13341ed309cad0297a4e2fd3f0196", "output": 1, "value": 64849668, "status": "confirmed" }]}

              


连接到对等方并且建立支付通道


第1层BTC交易=1。等待时间= 60分钟。


要想在网络上进行付款,需要先连接到网络中。如何能够找到另一个要连接的节点呢?前往Acinq的闪电网络浏览器。


搜索连接状态良好的对等点(有很多通道的对等点),然后复制其URI。最初,我在连接到几个节点的过程中超时了,但只要继续尝试,总能找到一个可以立即进行连接的节点。


$ lightning-cli connect 03e5f9d1935c67a029bf0a26af5f63109f4f4c45993a8f45177a8f2f39bcb46144 77.58.162.148 9735$ lightning-cli list peers{ "state": "GOSSIPING", "id": "03e5f9d1935c67a029bf0a26af5f63109f4f4c45993a8f45177a8f2f39bcb46144", "alias": "IslandDSP", "netaddr": ["84.246.200.122:9735"], "connected": true}


现在,我们可以与刚刚连接到的对等节点建立支付通道。打开和关闭通道都需要与主区块链进行交互,因此我们要为其提供足够的资金(以millisatoshis为单位),以便将其用于多次付款。


$ lightning-cli fundchannel 03e5f9d1935c67a029bf0a26af5f63109f4f4c45993a8f45177a8f2f39bcb46144 50000$ lightning-cli listpeers{ "id": "03e5f9d1935c67a029bf0a26af5f63109f4f4c45993a8f45177a8f2f39bcb46144", "connected": true, "netaddr": ["84.246.200.122:9735"], "alias": "IslandDSP", "color": "68f442", "channels": [{ "state": "CHANNELD_AWAITING_LOCKIN", "owner": "lightning_channeld", "channel_id": "958b3bd04adb40fd8ff0700a0b24e0298a2ac265273c08ed0218af38140ba678", "funding_txid": "78a60b1438af1802ed083c2765c22a8a29e0240b0a70f08ffd40db4ad03b8b95", "msatoshi_to_us": 500000000, "msatoshi_total": 500000000, "dust_limit_satoshis": 546, "max_htlc_value_in_flight_msat": 18446744073709552000, "channel_reserve_satoshis": 0, "htlc_minimum_msat": 0, "their_to_self_delay": 6, "our_to_self_delay": 144, "to_self_delay": 6, "max_accepted_htlcs": 483, "status": ["CHANNELD_AWAITING_LOCKIN:Funding needs more confirmations."],


同样,在比特币测试网浏览器中搜索txid,并等待3-6次确认,然后该通道将会被视为已开放。这时,你应该看到状态更改为CHANNELD_NORMAL。


$ lightning-cli listpeers{ "peers": [{ "id": "03e5f9d1935c67a029bf0a26af5f63109f4f4c45993a8f45177a8f2f39bcb46144", "connected": true, "netaddr": ["84.246.200.122:9735"], "alias": "IslandDSP", "color": "3399ff", "channels": [{ "state": "CHANNELD_NORMAL", "owner": "lightning_channeld", "short_channel_id": "1289768:416:0", "channel_id": "ba95c71228ce3f57e25f6ac9c4a7418a52a056435b2276dd47437c7521ebda8e", "funding_txid": "8edaeb21757c4347dd76225b4356a0528a41a7c4c96a5fe2573fce2812c795ba", "msatoshi_to_us": 100000000, "msatoshi_total": 100000000, "dust_limit_satoshis": 546, "max_htlc_value_in_flight_msat": 18446744073709552000, "channel_reserve_satoshis": 0, "htlc_minimum_msat": 0, "their_to_self_delay": 6, "our_to_self_delay": 144, "to_self_delay": 6, "max_accepted_htlcs": 483, "status": ["CHANNELD_NORMAL:Funding transaction locked. Channel announced."], "in_payments_offered": 0, "in_msatoshi_offered": 0, "in_payments_fulfilled": 0, "in_msatoshi_fulfilled": 0, "out_payments_offered": 0, "out_msatoshi_offered": 0, "out_payments_fulfilled": 0, "out_msatoshi_fulfilled": 0 }] }]}

          


生成付款请求


现在我们已经建好了一个支付通道,那么就可以开始使用闪电网络进行交易了。

转至Y’alls 上的这篇文章(https://yalls.org/),然后单击“continue reading继续阅读”生成付款请求。这实际上是序列化的凭证,将其解码后表示你没被多收费。

$ lightning-cli decodepay lntb1500n1pdvp7t9pp5k5mvp8u045pdnumnt89cdc7l90lpvff7sjzkrvawg93ju3mgg3nsdp62fjkzepqg9e8g6trd3jn5gzfyp9kummhyptksmeq2dshgmmndp5jqjtnp5cqzyskw8lzg7w4hcfyhncczcaexlpx3tdefm0vjnh9dkqev23g94tdta8jjqzp87v6r9q8xwe3mnjf0tryaa7zkxxj4gwgfcqea32j0x069qqsjyjhz{ "currency": "tb", "timestamp": 1522596197, "created_at": 1522596197, "expiry": 3600, "payee": "039cc950286a8fa99218283d1adc2456e0d5e81be558da77dd6e85ba9a1fff5ad3", "msatoshi": 150000, "description": "Read Article: I Know Who Satoshi Is\r", "min_final_cltv_expiry": 144, "payment_hash": "b536c09f8fad02d9f37359cb86e3df2bfe16253e848561b3ae41632e47684467", "signature": "3045022100b38ff123ceadf0925e78c0b1dc9be13456dca76f64a772b6c0cb151416ab6afa022079480209fccd0ca0399d98ee724bd63277be158c69550e42700cf62a93ccfd14"}

             


进行支付


第2层 BTC 交易= 1 等待时间 = 毫秒。


现在我们已经准备好进行第二次比特币交易了,第一次比特币交易已经建立了闪电网络,因此第二次交易应该立即就能得到确认。


$ lightning-cli pay lntb1500n1pdvp7t9pp5k5mvp8u045pdnumnt89cdc7l90lpvff7sjzkrvawg93ju3mgg3nsdp62fjkzepqg9e8g6trd3jn5gzfyp9kummhyptksmeq2dshgmmndp5jqjtnp5cqzyskw8lzg7w4hcfyhncczcaexlpx3tdefm0vjnh9dkqev23g94tdta8jjqzp87v6r9q8xwe3mnjf0tryaa7zkxxj4gwgfcqea32j0x069qqsjyjhz{ "code": 206, "message": "Fee 1100 is 0.733333% of payment 150000; max fee requested is 0.500000%", "data": { "fee": 1100, "feepercent": 0.733333, "msatoshi": 150000, "maxfeepercent": 0.500000, "getroute_tries": 6, "sendpay_tries": 0, "failures": [] }}


回到Y’alls,然后点击“check for payment检查付款”以显示该文章。但不幸的是,这一步我没成功。我回去检查命令行的时候才发现我确实没付款。


$ lightning-cli listpayments{ "payments": [] }


为了解决这个问题,我尝试用Y’alls直接创建一个支付通道。


$ lightning-cli connect 039cc950286a8fa99218283d1adc2456e0d5e81be558da77dd6e85ba9a1fff5ad3 34.200.252.146$ lightning-cli fundchannel 039cc950286a8fa99218283d1adc2456e0d5e81be558da77dd6e85ba9a1fff5ad3 500000{ "code": -1, "message": "received ERROR channel 3795216ba4a257a1f36f1062af58b4513ad82dac90d298e45ca83271e67cf1d6: Unacceptable channel constraints: minimum HTLC value is too large: 0"}


显然,这是lnd的一个bug,Y’alls必须用做他们的闪电后台驻留程序。


作为备份计划,我们将使用闪电网络钱包向自己付款。转到htlc.me(https://htlc.me/)并生成钱包,然后单击“receive接收”标签,请求支付0.0001 tBTC($0.65 tUSD)。复制序列化的凭证并且在发送之前进行核实。


$ lightning-cli decodepay lntb100u1pdvzzc4pp5h55942ehdpy5g70sty9mnvt3k2wlvt4ucnctnellau8drhaew8lsdqqcqzyswv3n3vyzx9uua4tjl8ttcp5fp7srn80zywvg4vses6fj4q9n3v846mgkuu648u37venf93znkckadjejvddv04vyq5l2krx486z23ysqhcrxg6{ "currency": "tb", "timestamp": 1522600725, "created_at": 1522600725, "expiry": 3600, "payee": "03193d512b010997885b232ecd6b300917e5288de8785d6d9f619a8952728c78e8", "msatoshi": 10000000, "description": "", "min_final_cltv_expiry": 144, "payment_hash": "bd285aab3768494479f0590bb9b171b29df62ebcc4f0b9e7ffef0ed1dfb971ff", "signature": "30440220732338b0823179ced572f9d6bc06890fa0399de223988ab21986932a80b38b0f02205d6d16e73553f23e666692c453b62dd6cb32635ac7d584053eab0cd53e84a892"}


这次,当我试着付款的时候,收到了多个错误。


$ lightning-cli pay lntb100u1pdvzzc4pp5h55942ehdpy5g70sty9mnvt3k2wlvt4ucnctnellau8drhaew8lsdqqcqzyswv3n3vyzx9uua4tjl8ttcp5fp7srn80zywvg4vses6fj4q9n3v846mgkuu648u37venf93znkckadjejvddv04vyq5l2krx486z23ysqhcrxg6{ "failures": [{ "type": "FAIL_PAYMENT_REPLY", "erring_index": 1, "failcode": 4103...


然而,当我刷新htlc.me网页时,我发现付款实际上已经成功了。在控制台检查确认已付款。


$ lightning-cli listpayments{ "payments": [{ "id": 1, "payment_hash": "bd285aab3768494479f0590bb9b171b29df62ebcc4f0b9e7ffef0ed1dfb971ff", "destination": "03193d512b010997885b232ecd6b300917e5288de8785d6d9f619a8952728c78e8", "msatoshi": 10000000, "msatoshi_sent": 10002020, "timestamp": 1522601027, "created_at": 1522601027, "status": "complete", "payment_preimage": "3e75637befbeec9e7056a4103a06d652cd3cdee9134de69799d8b39c6b1f714c" }]}


我们这次付款只付了2020 millisatoshi(比特币的计量单位)的交易费用(在写本文时是0.00013美元)。


最后,我们尝试直接连接到htlc.me。这样我们在付款的时候就不会出现任何控制台错误。从上面的解码付款命令输出中复制付款人ID,并在闪电网络浏览器中进行搜索。复制URI,然后连接并创建一个通道。


$ lightning-cli connect 03193d512b010997885b232ecd6b300917e5288de8785d6d9f619a8952728c78e8 34.201.11.250 9735$ lightning-cli fundchannel 03193d512b010997885b232ecd6b300917e5288de8785d6d9f619a8952728c78e8 500000


但我们需要等待交易在区块链上确认,通道才可用。


一个小时后,我们可以看到通道已经建立——状态显示CHANNELD_NORMAL


$ lightning-cli listpeers{ "id": "03193d512b010997885b232ecd6b300917e5288de8785d6d9f619a8952728c78e8", "connected": true, "netaddr": ["34.201.11.250:9735"], "alias": "htlc.me", "color": "854cc5", "channels": [{ "state": "CHANNELD_NORMAL", "owner": "lightning_channeld", "short_channel_id": "1289949:56:0", "channel_id": "20dd321c23224b2022f62f59602efc311a8ad63c4481fcd210ef8dade88e8064", "funding_txid": "64808ee8ad8def10d2fc81443cd68a1a31fc2e60592ff622204b22231c32dd20", "msatoshi_to_us": 500000000, "msatoshi_total": 500000000, "dust_limit_satoshis": 546, "max_htlc_value_in_flight_msat": 18446744073709552000, "channel_reserve_satoshis": 0, "htlc_minimum_msat": 0, "their_to_self_delay": 6, "our_to_self_delay": 144, "to_self_delay": 6, "max_accepted_htlcs": 483, "status": ["CHANNELD_NORMAL:Funding transaction locked."], "in_payments_offered": 0, "in_msatoshi_offered": 0, "in_payments_fulfilled": 0, "in_msatoshi_fulfilled": 0, "out_payments_offered": 0, "out_msatoshi_offered": 0, "out_payments_fulfilled": 0, "out_msatoshi_fulfilled": 0 }]}


这时在htlc.me上生成另一张凭证,这次是0.00020000 tBTC ($1.31 tUSD),并且记得在付款前检查详细信息是否正确。


$ lightning-cli decodepay lntb200u1pdvzvf8pp5tyjfw9ma9uj8hhrhqvmum9vzvaun45qg6mmesu3c08zkhmgl44ssdqqcqzysah4qe4zef3rssusa42cyx0gxxq6q06g50m38w7chz50en80dfh45fj7kdgpx474udehq22mv2pwxfky66kdjdrw88z34w8hjjdjdu6sq6zy2a4


最后付款。


$ lightning-cli pay lntb200u1pdvzvf8pp5tyjfw9ma9uj8hhrhqvmum9vzvaun45qg6mmesu3c08zkhmgl44ssdqqcqzysah4qe4zef3rssusa42cyx0gxxq6q06g50m38w7chz50en80dfh45fj7kdgpx474udehq22mv2pwxfky66kdjdrw88z34w8hjjdjdu6sq6zy2a4{ "id": 2, "payment_hash": "592497177d2f247bdc770337cd958267793ad008d6f798723879c56bed1fad61", "destination": "03193d512b010997885b232ecd6b300917e5288de8785d6d9f619a8952728c78e8", "msatoshi": 20000000, "msatoshi_sent": 20000000, "timestamp": 1522610489, "created_at": 1522610489, "status": "complete", "payment_preimage": "1e2767675a227c7f8d57252bfe67d6324829c267f3df38396b4d2bb79a27dfd6", "getroute_tries": 1, "sendpay_tries": 1, "route": [{ "id": "03193d512b010997885b232ecd6b300917e5288de8785d6d9f619a8952728c78e8", "channel": "1289949:56:0", "msatoshi": 20000000, "delay": 144 }], "failures": []}


这次没有出现任何控制台错误。你在htlc.me的网络钱包应该会立即检测到已付款。现在,你应该可以以十分低廉的费用进行任意金额的付款了,直到你耗尽通道中的资金,或该笔款项到期为止。


总结


如你所见,测试网上的节点至少还能用。三个主要的闪电软件实现(lnd, c-lightning, eclair)仍都处于开发的早期阶段,因此有一些错误也不足为奇。但这至少能让你了解:将来,随着网络的不断扩大以及运行它的软件不断成熟完善,交易也将会变的更加便宜又快速。




现在报名,立享200元优惠,赶紧报名吧!👇 👇 👇 




推荐阅读


猛戳"阅读原文"立即报名

老铁在看了吗?👇

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存